//
//  BaseTableViewController.swift
//  SwiftSina
//
//  Created by 刘战军 on 16/5/10.
//  Copyright © 2016年 LiuZhanJun. All rights reserved.
//

import UIKit
import HMRefresh

class BaseTableViewController: UIViewController {
    // MARK: - 公共数据
    /// 用户登录标记
    let islogin = true
    
    // 动态加载视图
    var visitorView: VisitorView?
    
    /// 上拉刷新视图
    var pullupView: UIActivityIndicatorView = UIActivityIndicatorView()
    
    // MARK: - 设置公共属性
    lazy var tabView = UITableView(frame: CGRectZero, style: .Plain)
    
    /// 创建刷新控件
    // var refresh: HMRefreshControl?
    var refresh = HMRefreshControl()
    
    // MARK: - 视图生命周期
    override func loadView() {
        
        islogin ? setVisitorView() : prepareTabView()
        
        // 设置数据源和代理
        // prepareTabView()
        
     }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        loadData()
        
    }
    
    func loadData() {
        
        
    }

}

// MARK: - 设置界面
extension BaseTableViewController {
    
    /**
    设置访客视图
    */
    private func setVisitorView() {
        visitorView = VisitorView()
        
        // 给 visitorView 设置代理
        visitorView?.delegate = self
        
        view = visitorView
        
        // 设置状态栏按钮 - 如果换行参数, 一定保证一个参数一行
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "注册", style: .Plain, target: self, action: "didClickRegisterBarButton")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "登陆", style: .Plain, target: self, action: "didClickLoginBarButton")
        
    }
    
    private func prepareTabView() { 
        
        view = tabView
        
        tabView.dataSource = self
        
        tabView.delegate = self
        


    }
    
    func prepareRefeshControl() {
        
        // 将refresh添加到view中
        tabView.addSubview(refresh)
        
        // refresh = HMRefreshControl()
        
        // 设置下拉刷新视图
        refresh.pulldownView = ZJPulldownRefreshView.refreshView()
        refresh.normalString = "下拉起飞"
        refresh.pullingString = "放开起飞"
        refresh.refreshingString = "正在起飞"
        refresh.lastRefreshString = "末次"
        
        // 给refresh添加点击事件
        refresh.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        // pullupView = UIActivityIndicatorView(activityIndicatorStyle: .WhiteLarge)
        
        // pullupView.backgroundColor = UIColor.grayColor()
        
        // 将活动指示器视图添加到tabView的footer中
        // tabView.tableFooterView = pullupView
    }
    
}

// MARK: - 利用 extension 设置数据源和代理方法
extension BaseTableViewController: UITableViewDelegate, UITableViewDataSource {
    
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            return 1
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        return UITableViewCell()
        
    }
    
    
    // 当正在显示cell的时候调用活动指示器视图
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        // 计算数据行数
        // 1.section
        let section = tabView.numberOfSections - 1
        // 如果没有组的话, 就返回
        if section < 0 {
            return
        }
        
        // row
        let row = tabView.numberOfRowsInSection(section) - 1
        
        // 如果是最后一行的最后一组的话, 就上拉刷新/ 加载数据
        if indexPath.section == section && indexPath.row == row && !pullupView.isAnimating() {
            
            print("上拉刷新")
            
            // 上拉刷新
            pullupView.startAnimating()
            
            // 加载数据
            loadData()
            
        }

    }
 
}

// MARK: - VisitorViewDelegate
extension BaseTableViewController: VisitorViewDelegate {
    
    func visitorViewDidRegister() {
        print("注册")
    }
    
    func visitorViewLogin() {
        print("登陆")
    }
}
